<?php
/*
 * [JINYUN!] (C)2001-2099 Jinyunweb.com
 * This is NOT a freeware, use is subject to license terms
 * $Id: 2017-12-13 03:39:35 apple $
*/
defined('BY_JYA') or exit('error');
$_RQ['op']=$_RQ['op']?$_RQ['op']:'list';
$return=array();
$return['types']=array(
	'1'=>'普通订阅号',
	'2'=>'认证订阅号',
	'3'=>'普通服务号',
	'4'=>'认证服务号'
);
if($_RQ['op']=='list'){
	//公众号列表
	$params=array('uniacid'=>$_SESSION['uniacid']);
	if($_RQ['title']){
		$params['title like']='%'.trim($_RQ['title']).'%';
		$return['params']['title']=trim($_RQ['title']);
	}
	$fields=array('id','title','is_auth','is_open','isdefault','type');
	$pindex = max(1, $_RQ['page']);
	$psize = 15;
	$total='';
	$list=pdo_getslice('core_account_wechat',$params,array($pindex,$psize),$total,$fields);
	if($list){
		foreach($list as &$item){
			$item['menu']=array('action'=>'wechat.menu','query'=>'wxgid='.$item['id'],'title'=>'自定义菜单');
			$item['fans']=array('action'=>'wechat.fans','query'=>'wxgid='.$item['id'],'title'=>'粉丝管理');
			$item['mass']=array('action'=>'wechat.mass','query'=>'wxgid='.$item['id'],'title'=>'群发管理');
			$item['media']=array('action'=>'wechat.media','query'=>'wxgid='.$item['id'],'title'=>'素材管理');
		}
	}
	$return['statuss']=$statuss;
	$return['list']=$list?$list:array();
	$totalpage=ceil($total/$psize);
	$totalpage=intval($totalpage);
	$return['totalpage'] =$totalpage;
	$return['params']['page'] =$pindex;
	//$return['actions']=get_actions(array('dmenu','mass','fans','media'));
	//授权添加公众号url
	$return['url']=cfc('open')->get_sq_url(1);
	$htmls=array(
		'type'=>'list',
		'tabs'=>array(
			array('op'=>'list','title'=>'公众号列表'),
			array('op'=>'edit','title'=>'普通模式添加公众号'),
			array('op'=>'add','title'=>'授权模式添加公众号'),
			array('op'=>'renzheng','title'=>'域名认证文件上传'),
		),
		'list'=>array('data'=>'list',
			'tip'=>'
			四合一公众号（微信+头条号+企业微信+支付宝生活号+百度熊掌）</br>
			<em>重新定义四合一：</em></br>
			1、公众号相关信息只需设置一次；</br>
			2、公众号下面的应用所有数据全部统一共用（例如：商城的商品，会员，订单等所有数据<em>共用</em>）：</br>
			3、在不同的公众号环境下，页面风格，页面数据都是一模一样的。</br>
			4、《授权类型》切换后将启用微信开放平台的授权模式(<red>不懂的请勿切换成《授权类型》</red>)，需求前往《微信公众平台》后台做相应的设置调整！</br>
			5、只有认证服务号才可以主动获取粉丝信息（OPENID/昵称/头像等），实现微信端自动登录（<red>如果是借用的，公众号类型也要勾选《认证服务号》才能自动登录</red>）。
			',
			'list'=>array(
			array('type'=>'string','title'=>'公众号名称','name'=>'title'),
			array('type'=>'href','title'=>'自定义菜单','name'=>'menu'),
			array('type'=>'href','title'=>'粉丝管理','name'=>'fans'),
			array('type'=>'href','title'=>'群发管理','name'=>'mass'),
			array('type'=>'href','title'=>'素材管理','name'=>'media'),
			array('type'=>'radio','title'=>'添加类型','name'=>'is_open','options'=>'isopen'),
			array('type'=>'switch','title'=>'默认公众号','name'=>'isdefault','set'=>'set'),
		),'action'=>array(
			array('type'=>'post','op'=>'set_open','message'=>'确定要切换成《授权类型》吗？切换后将启用微信开放平台的授权模式(不懂的请勿切换成《授权类型》)，需求前往《微信公众平台》后台做相应的设置调整！','title'=>'切换成授权类型','show'=>array('is_open'=>0)),
			array('type'=>'post','op'=>'set_open','message'=>'确定要切换成《普通类型》吗？切换后注意公众号的参数设置！','title'=>'切换成普通类型','show'=>array('is_open'=>1)),				
		)),
		'search_one'=>array('name'=>'title'),
	);
	$return['isauth']=array('不是','是');
	$return['isopen']=array('普通添加','授权添加');
	$return['htmls']=$htmls;
	exi($return);
}
if($_RQ['op']=='edit'){
	//编辑公众号
	$id=intval($_RQ['id']);
	if($id){
		$return['item']=pdo_get('core_account_wechat',array('uniacid'=>$_SESSION['uniacid'],'id'=>$id));
	}else{
		model('core/web')->check_num('wechat');
		$return['item']=array();
		$return['item']['is_auth']=0;
	}
	$return['account']=pdo_get('core_accounts',array('uniacid'=>$_SESSION['uniacid']),array('token','aeskey'));
	$return['account']['url']=SITEROOT.'api/wxapi.php?id='.$_SESSION['uniacid'];
	$return['account']['tt_url']=SITEROOT.'api/wxapi.php?type=ttapp&id='.$_SESSION['uniacid'];
	$return['account']['baidu_url']=SITEROOT.'api/wxapi.php?type=baiduapp&id='.$_SESSION['uniacid'];
	$return['account']['ali_url']=SITEROOT.'api/wxapi.php?type=aliapp&id='.$_SESSION['uniacid'];
	$return['item']['url']=$return['account']['url'];
	$return['item']['tt_url']=$return['account']['tt_url'];
	$return['item']['baidu_url']=$return['account']['baidu_url'];
	$return['item']['ali_url']=$return['account']['ali_url'];
	$return['item']['token']=$return['account']['token'];
	$return['item']['aeskey']=$return['account']['aeskey'];
	$return['item']['siteroot']=SITEROOT.'api/oauth2.php';
	$htmls=array(
		'type'=>'edit',
		'post'=>'post',
		'tabs'=>array(
			array('op'=>'list','title'=>'返回公众号列表'),
		),
		'edit_tab'=>true,
		'edits'=>array(
			array(
				'title'=>'微信公众号',
				'list'=>array(
					array('type'=>'tip','title'=>'（【温馨提示】:JS域名安全认证文件上传？统一在：站点设置--认证文件上传！）'),
					array('type'=>'string','title'=>'公众号名称','name'=>'title', 'help'=>'' ,'must'=>true),
					array('type'=>'radio','title'=>'公众号类型','name'=>'type','options'=>'types','help'=>'请设置正确的公众号类型，以免出错！(非认证服务号，可以借用系统认证服务号权限，否则无法微信一键登录，获取粉丝信息等；如果是认证服务号，需移步《微信公众号平台》--》接口设置--》网页授权回调域名，设置好域名才能正常使用！)' ,'must'=>true),
					array('type'=>'switch','title'=>'是否借用','name'=>'is_auth','help'=>'<red>开启后，默认是借用系统的公众号！不想借用系统的，也可以自定义借用！（<red>开启借用后，公众号类型也要勾选《认证服务号》才能自动登录</red>）'),
					array('type'=>'switch','title'=>'自定义借用','name'=>'is_diy','show'=>array('is_auth'=>1),'help'=>'<red>如果系统没有开启借用或没有指定借用公众号，可以直接自定义借用公众号</red>'),
					array('type'=>'string','title'=>'借用AppID','name'=>'appid','show'=>array('is_auth'=>1,'is_diy'=>1),'help'=>'填写被借用的微信公众号开发者AppID。'),
					array('type'=>'string','title'=>'借用AppSecre','name'=>'appsecret','show'=>array('is_auth'=>1,'is_diy'=>1),'help'=>'填写被借用的公众号开发者AppSecret。登陆微信公众平台——开发——基本配置——开发者密钥'),
					array('type'=>'string','title'=>'AppID','name'=>'appid','show'=>array('is_auth'=>array(0,2)),'help'=>'填写公众号开发者AppID。登陆微信公众平台——开发——基本配置——开发者ID'),
					array('type'=>'string','title'=>'AppSecre','name'=>'appsecret','show'=>array('is_auth'=>array(0,2)),'help'=>'填写公众号开发者AppSecret。登陆微信公众平台——开发——基本配置——开发者密钥'),
					array('type'=>'string','title'=>'原始ID','name'=>'oldid','show'=>array('is_auth'=>array(0,2)), 'help'=>'填写公众号原始ID。登陆微信公众平台——设置——公众号设置——帐号详情——原始ID'),
					array('type'=>'string','title'=>'oAuth独立域名','name'=>'oauth_url','show'=>array('is_auth'=>array(0,2)),'help'=>'留空表示使用本系统域名；一些多域名授权功能，获取oAuth独立域名'),
					array('type'=>'string','title'=>'公众号用户授权地址','name'=>'oauth_geturl','show'=>array('is_auth'=>array(0,2)),'help'=>'默认留空，填写后将替换https://open.weixin.qq.com/获取授权！'),
					array('type'=>'copy','title'=>'被授权地址','name'=>'siteroot','help'=>'是相对于【公众号用户授权地址】而言，比如把【被授权地址】填到其他域名服务器下公众号的【公众号用户授权地址】'),
					//array('type'=>'image','title'=>'公众号logo','name'=>'logo'),
					array('type'=>'switch','title'=>'是否设置为默认公众号','name'=>'isdefault'),
					array('type'=>'tip','title'=>'公众号绑定方法（授权模式添加公众号请忽略此步骤）：根据提示填写上述参数之后，将以下三项参数填至微信公众平台——开发——基本配置——服务器配置，启用，提交即可。'),
					array('type'=>'tip','title'=>'<red>[token验证失败?]:如果是https的：微信目前HTTPS他是有安全门槛的，达不到ATS安全标准证书或SSL证书安装不规范，就算安装了HTTPS也是不会通过微信认证；如果是其他原因，可以百度搜索一下自行排查。</red>' ),
					array('type'=>'copy','title'=>'服务器地址','name'=>'url', 'help'=>'' ),
					array('type'=>'copy','title'=>'令牌（Token）','name'=>'token','help'=>'' ),
					array('type'=>'copy','title'=>'消息加解密密钥(EncodingAESKey)','name'=>'aeskey','help'=>''),
				)
			),
			array(
				'title'=>'头条号',
				'list'=>array(
					array('type'=>'string','title'=>'头条号KEY','name'=>'tt_appid','help'=>'填写头条号client_key'),
					array('type'=>'string','title'=>'头条号Secre','name'=>'tt_secret','help'=>'填写头条号client_secret'),
				)
			),
			array(
				'title'=>'支付宝生活号',
				'list'=>array(
					array('type'=>'string','title'=>'生活号AppID','name'=>'ali_appid','help'=>'填写生活号AppID'),
					array('type'=>'string','title'=>'生活号AppSecre','name'=>'ali_secret','help'=>'填写生活号AppSecret'),
					array('type'=>'tip','title'=>'生活号绑定方法：根据提示填写上述参数之后，将以下三项参数填至生活号平台——开发——基本配置——服务器配置，启用，提交即可。'),
					array('type'=>'copy','title'=>'服务器地址','name'=>'ali_url', 'help'=>'' ),
					array('type'=>'copy','title'=>'令牌（Token）','name'=>'token','help'=>'' ),
					array('type'=>'copy','title'=>'消息加解密密钥(EncodingAESKey)','name'=>'aeskey','help'=>'' ),
				)
			),
			array(
				'title'=>'百度百家号',
				'list'=>array(
					array('type'=>'string','title'=>'百家号AppID','name'=>'baidu_appid','help'=>'填写百家号AppID'),
					array('type'=>'string','title'=>'百家号app_token','name'=>'baidu_secret','help'=>'填写百家号app_token'),
					array('type'=>'tip','title'=>'百家号绑定方法：根据提示填写上述参数之后，将以下三项参数填至百家号平台——开发——基本配置——服务器配置，启用，提交即可。'),
					array('type'=>'copy','title'=>'服务器地址','name'=>'baidu_url', 'help'=>'' ),
					array('type'=>'string','title'=>'令牌（Token）','name'=>'baidu_token','help'=>'' ),
					array('type'=>'string','title'=>'消息加解密密钥(EncodingAESKey)','name'=>'baidu_aeskey','help'=>'' ),
				)
			),
		)
	);
	$return['htmls']=$htmls;
	exi($return);
}
if($_RQ['op']=='add'){
	//授权添加公众号
	model('core/web')->check_num('wechat');
	if($_SESSION['os']!='windows'){
		exi('暂不支持授权添加','error');
	}
	$url=cfc('open')->get_sq_url(1);
	exi('前往授权！','','',$url);
}
if($_RQ['op']=='result'){
	//授权添加公众号回调结果处理
	if (empty($_RQ['auth_code'])){
		exit('授权登陆失败，请重试！');
	}
	$data=cfc('open')->get_authorization_info($_RQ['auth_code']);
	$info=cfc('open')->get_info($data['authorizer_appid']);
	if($info['service_type_info']==2){
		if($info['verify_type_info']>0){
			$type=4;
		}else{
			$type=3;
		}
	}else{
		if($info['verify_type_info']>0){
			$type=2;
		}else{
			$type=1;
		}
	}
	$insert=array(
		'uniacid'=>$_SESSION['uniacid'],
		'is_open'=>1,
		'type'=>$type,
		'appid'=>$data['authorizer_appid'],
		'access_token'=>$data['authorizer_access_token'],
		'expire'=>TIMESTAMP+$data['expires_in']-200,
		'refresh_token'=>$data['authorizer_refresh_token'],
		'title'=>$info['nick_name'],
		'oldid'=>$info['user_name'],
		'createtime'=>TIMESTAMP,
	);
	$check=pdo_getcolumn('core_account_wechat',array('appid'=>$insert['appid'],'uniacid'=>$_SESSION['uniacid']),'id');
	if($check){
		exi('授权添加失败，您已添加过该公众号！','error','list');
	}
	pdo_insert('core_account_wechat',$insert);
	exi('授权添加成功！','','list');
}
if($_RQ['op']=='post'){
	//提交数据
	$post=get_postdata();
	if(empty($post['type'])){
		exi('请选择公众号类型！','error');
	}
	if($post['is_auth']==2 && !$post['oauth_url']){
		exi('请填写oAuth独立域名！','error');
	}
	if($post['is_auth']!=1 && !$post['oldid']){
		exi('原始ID必填，否则关键词触发无效！','error');
	}
	if($post['is_diy']==1 && (!$post['appid'] || !$post['appsecret'])){
		exi('自定义借用，必须填写appid和appsecret！','error');
	}
	$core_auth=core_setting('wechat_auth');
	if(!$core_auth['open'] && $post['is_auth']==1){
		exi('系统未开启公众号借用！不能设置借用模式！','error');
	}
	$id=intval($post['id']);
	$data=array(
		'type'=>intval($post['type']),
		'isdefault'=>intval($post['isdefault']),
		'title'=>trim($post['title']),
		//授权模式
		'is_auth'=>trim($post['is_auth']),
		'oauth_url'=>trim($post['oauth_url']),
		'oauth_geturl'=>trim($post['oauth_geturl']),
		'is_diy'=>trim($post['is_diy']),
		'appid'=>trim($post['appid']),
		'appsecret'=>trim($post['appsecret']),
		'oldid'=>trim($post['oldid']),
		'yindao'=>trim($post['yindao']),
		'tt_appid'=>trim($post['tt_appid']),
		'tt_secret'=>trim($post['tt_secret']),
		'wxwork_appid'=>trim($post['wxwork_appid']),
		'ali_appid'=>trim($post['ali_appid']),
		'ali_secret'=>trim($post['ali_secret']),
		'baidu_appid'=>trim($post['baidu_appid']),
		'baidu_secret'=>trim($post['baidu_secret']),
		'baidu_token'=>trim($post['baidu_token']),
		'baidu_aeskey'=>trim($post['baidu_aeskey']),
	);
	if($post['is_auth']!=1){
		check_wechat($data['appid'],$data['appsecret']);
	}
	//清空token
	$data['access_token']='';
	$data['expire']=0;
	//如果设置为默认公众号，先将当前默认公众号调整为非默认
	if($data['isdefault']){
		pdo_update('core_account_wechat',array('isdefault'=>0),array('uniacid'=>$_SESSION['uniacid'],'isdefault'=>1));
		pdo_update('account_wechats',array('key'=>$post['appid']),array('uniacid'=>$_SESSION['uniacid']));
	}
	if($id){
		pdo_update('core_account_wechat',$data,array('uniacid'=>$_SESSION['uniacid'],'id'=>$id));
		if($post['type'] !=4){
			exi('编辑公众号成功(非认证服务号，无法微信一键登录噢)！','','list');
		}else{
			exi('编辑公众号成功！','','list');
		}
	}else{
		//检查公众号个数
		model('core/web')->check_num('wechat');
		$check=pdo_getcolumn('core_account_wechat',array('uniacid'=>$_SESSION['uniacid'],'oldid'=>$data['oldid']),'id');
		if($check && !$data['oldid']){
			exi('您已添加过该公众号了！请勿重复添加！','error');
		}
		$data['uniacid']=$_SESSION['uniacid'];
		$data['createtime']=TIMESTAMP;
		pdo_insert('core_account_wechat',$data);
		if($post['type'] !=4){
			exi('编辑公众号成功(非认证服务号，无法微信一键登录噢)！','','list');
		}else{
			exi('添加公众号成功！','','list');
		}
	}
}
if($_RQ['op']=='set'){
	$id=intval($_RQ['id']);
	if(!$id){
		exi('请先选择要设置的公众号！','error');
	}
	$post=get_postdata();
	if(isset($post['isdefault'])){
		if($post['isdefault']==1){
			pdo_update('core_account_wechat',array('isdefault'=>0),array('uniacid'=>$_SESSION['uniacid']));
		}
		pdo_update('core_account_wechat',array('isdefault'=>intval($post['isdefault'])),array('id'=>$id,'uniacid'=>$_SESSION['uniacid']));
	}
	exi('操作成功！','','list');
}
if($_RQ['op']=='set_open'){
	$id=intval($_RQ['id']);
	if(!$id){
		exi('请先选择要设置的公众号！','error');
	}
	$wechat=pdo_get('core_account_wechat',array('id'=>$id,'uniacid'=>$_SESSION['uniacid']),'is_open');
	pdo_update('core_account_wechat',array('is_open'=>$wechat['is_open']?0:1),array('id'=>$id,'uniacid'=>$_SESSION['uniacid']));
	exi('切换公众号模式成功！请即时核对AppID和AppSecre是否正常！','','list');
}
if($_RQ['op']=='del'){
	//删除数据，删除公众号，同时删除公众号的粉丝，自定义菜单等数据。一般地，删除数据都要相应地删除数据相关的子数据、附属数据。
	$id=intval($_RQ['id']);
	if($id){
		pdo_delete('core_account_wechat',array('uniacid'=>$_SESSION['uniacid'],'id'=>$id));
		pdo_delete('core_fans',array('uniacid'=>$_SESSION['uniacid'],'wxgid'=>$id));
	}
	$del=trim($_RQ['del'],';');
	if($del){
		$del=explode(';',$del);
		foreach($del as $id){
			$id=intval($id);
			if($id){
				pdo_delete('core_account_wechat',array('uniacid'=>$_SESSION['uniacid'],'id'=>$id));
				pdo_delete('core_fans',array('uniacid'=>$_SESSION['uniacid'],'wxgid'=>$id));
			}
		}
	}
	exi('删除成功！');
	
}
if($_RQ['op']=='renzheng'){
	//上传认证文件
	if($_RQ['postdata']){
		$post=get_postdata();
		if(!$post['renzheng']){
			exi('请先上传认证文件！','error');
		}
		$filename=pdo_getcolumn('core_attachment',array('attachment'=>$post['renzheng']),'title');
		if(preg_match('/[^\w\.-]/',$filename)){
			exi('认证文件名不合法！','error');
		}
		$file_data=cfc('files')->source_read($post['renzheng']);
		if(strlen($file_data)>100){
			exi('上传失败！认证文件内容超过限制！','error');
		}
		file_put_contents(ROOT_D.'/'.$filename.'.txt',$file_data);
		exi('上传成功！');
	}
	$return['item']=array();
	$return['htmls']=array(
		'type'=>'edit',
		'desc'=>'上传认证文件',
		'tabs'=>array(
			array('op'=>'list','title'=>'公众号列表'),
			array('op'=>'edit','title'=>'普通模式添加公众号'),
			array('op'=>'add','title'=>'授权模式添加公众号'),
			array('op'=>'renzheng','title'=>'域名认证文件上传'),
		),
		'edit'=>array(
			array('type'=>'upfile','title'=>'认证文件','name'=>'renzheng','ftype'=>'other','help'=>'<red>这里只是用于校验认证文件上传而已，不做保存(上传框是看不到已上传的文件的)</red>！本功能用于上传认证文件到站点根目录！例如，小程序或公众号设置授权域名时，提示需要上传认证文件。请下载下来，并在此处上传。'),
		),
	);
	exi($return);
}
